package com.djf.djfclickhouse.dao;

import com.djf.djfclickhouse.entity.Order;
import java.util.List;

/**
 * 订单数据访问接口
 */
public interface OrderDao {
    
    /**
     * 插入订单
     * @param order 订单对象
     * @return 影响行数
     */
    int insert(Order order);
    
    /**
     * 批量插入订单
     * @param orders 订单列表
     * @return 影响行数
     */
    int batchInsert(List<Order> orders);
    
    /**
     * 根据ID查询订单
     * @param id 订单ID
     * @return 订单对象
     */
    Order selectById(Long id);
    
    /**
     * 根据订单号查询订单
     * @param orderNo 订单号
     * @return 订单对象
     */
    Order selectByOrderNo(String orderNo);
    
    /**
     * 根据用户ID查询订单列表
     * @param userId 用户ID
     * @return 订单列表
     */
    List<Order> selectByUserId(Long userId);
    
    /**
     * 分页查询订单
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 订单列表
     */
    List<Order> selectWithPage(int offset, int limit);
    
    /**
     * 根据条件查询订单数量
     * @param userId 用户ID（可选）
     * @param orderStatus 订单状态（可选）
     * @return 订单数量
     */
    long countByCondition(Long userId, Integer orderStatus);
    
    /**
     * 更新订单状态
     * @param id 订单ID
     * @param orderStatus 新的订单状态
     * @return 影响行数
     */
    int updateOrderStatus(Long id, Integer orderStatus);
    
    /**
     * 逻辑删除订单
     * @param id 订单ID
     * @return 影响行数
     */
    int deleteById(Long id);
    
    /**
     * 物理删除订单（谨慎使用）
     * @param id 订单ID
     * @return 影响行数
     */
    int physicalDeleteById(Long id);
}